A computer system's reference monitor may look at memory accesses made by a program to ensure that the accesses are acceptable. Before use of the reference monitor, computers may have had difficulty because one program could attempt to access another program's memory. Such accesses could be insidious, causing programs to misbehave while creating difficulties in diagnosing problems. Thus reference monitors were inserted into hardware systems to observe accesses to memory. The reference monitor may generate an exception if a program attempts to improperly access memory.
A problem that may be associated with reference monitors is that they may not be able to prevent insidious memory accesses by one portion of a program vis a vis another portion of the same program. That is, computer systems may not use the reference monitors at the lowest levels such as at the operating system's kernel level. Rather, system operations may be separated into programs, and the operating system may switch between them, with each being subject to the reference monitor in a particular way. Therefore, a program may be unable to protect different components or subprograms of itself from each other. Similarly, the operating system kernel may be unable to protect itself from its components unless it forces those components to run as programs.
While software-based solutions to problems associated with the reference monitor have been implemented, many of these solutions are not practical. Specifically, the solutions fail to address practical requirements or characteristics of software. For example, software typically is multi-threaded. Also, the system may have to increase and decrease the amount of memory allocated to the software during execution. Software execution is sometimes interrupted. Finally, software needs to handle exceptions or normal transitions in control flow. The solutions offered to combat problems associated with the reference monitor may not account for these practical requirements or characteristics of software.